import uiautomator2 as u2
import time


# 读取配置文件中的包名列表
def read_packages_file(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            return [line.strip() for line in f if line.strip()]
    except Exception as e:
        print(f"读取配置文件失败: {e}")
        return []


# 启动应用并导航到安装页面
def start_app_and_navigate_to_install(d):
    d.app_start('org.hapjs.debugger')
    time.sleep(2)  # 等待应用启动

    # 点击"本地安装"按钮
    install_button = '本地安装'
    button = d(text=install_button)
    if not button.exists:
        print(f"未找到'{install_button}'按钮")
        return False

    button.click()
    time.sleep(1)  # 等待列表加载
    return True


# 在页面中查找包名元素，未找到时滑动页面继续查找
def find_package_by_scroll(d, package_name, max_swipes=10):
    """
    在当前页面查找包名元素，未找到时向上滑动页面继续查找

    参数:
    d: uiautomator2设备对象
    package_name: 要查找的包名
    max_swipes: 最大滑动次数

    返回:
    如果找到元素返回True，否则返回False
    """
    swipe_count = 0
    while swipe_count < max_swipes:
        package_element = d(text=package_name)
        if package_element.exists:
            return True

        # 向上滑动页面
        d.swipe(0.5, 0.8, 0.5, 0.2, 0.5)  # 从屏幕中间向上滑动
        time.sleep(0.5)  # 等待页面更新
        swipe_count += 1

    print(f"滑动{max_swipes}次后仍未找到包名元素")
    return False


# 连接设备
d = u2.connect()

# 读取要安装的包列表
packages_file = 'packages_to_install.txt'
packages = read_packages_file(packages_file)

if not packages:
    print("没有要安装的包，请检查配置文件")
else:
    print(f"找到 {len(packages)} 个待安装的包")

    # 循环安装每个包
    for package_name in packages:
        print(f"\n开始安装: {package_name}")

        # 启动应用并导航到安装页面
        if not start_app_and_navigate_to_install(d):
            print("无法导航到安装页面，跳过当前包")
            continue

        # 查找并点击对应的包（支持滑动查找）
        if not find_package_by_scroll(d, package_name):
            print(f"警告: 未找到包 '{package_name}', 跳过")
            continue

        # 点击包名元素
        package_element = d(text=package_name)
        package_element.click()
        print(f"已点击 '{package_name}', 等待安装完成...")

        # 等待安装完成 (根据实际情况调整等待时间)
        time.sleep(3)  # 假设安装需要3秒

        # 安装完成后返回桌面
        d.press('home')
        time.sleep(1)

    print("\n所有包安装完成!")